#!/usr/bin/ruby
require 'korundum4'
require 'rubygems'
require 'time'
$LOAD_PATH << File.dirname($0)
require 'droparea_parsers'

# Kell valamiert
$KCODE = 'UTF8'

#
# TODO
# a.,
# a kiskekben nehez a kinyitasra kattintani, tul kicsi a widget
# a headtask -ok kinyitoja legyen kisebb, zavaroan nagy
# ne nyiljon ki a task eatchild -nel
# torlesnel megerosites!!!!
# workspace kezeles!
#   bugok:
#   - az API elfogadja abban a projectben is a task -ot, ahova nincs jogom
#   - az API nem adja ki a projlist -ben h hova van jogom
# allithato legyen hany nap taszkjait lassuk
# summak?
# global hotkey (reboot kell)
# 
# b.,
# neha kerdezzen ra dolgozok-e meg? taskbar popup -ban!
# ha taszkot futtatunk nyiljon ki addig minden view?
# 
# c.,
# uj project nem fogadja a billable parametert api -n, toggl bug
# xchat integracio
# gcalendar integracio, lehessen belole dropolni bele (gcal nem tamogatja)
#
# Sort:
# a.,
# Minden oszlopot ki kell toltenunk es a juzerre bizni. Ha nem ABC szerint
# rendez, akkor a fa ossze vissza ugralhat (pl. ahogy elinditunk egy taszkot),
# ami rossz elmenyt ad. Emiatt tul sok ertelme nincs.
# A tasklistat erdemes rendezni frissesseg szerint, mert az praktikus.
# b.,
# Az air kliens listaja egy szinttel kisebb (kliens-project egy row),
# hat, nemtom jobb-e barmiben is.
# 
# Parancssori vezerles:
# TODO
# 
# Integracio:
# A task -ok forrasa gyakran email, ticket. Ezeket ujra felvenni kicsit nyug,
# mert elintezhetnek a szoftverek.
# 
# A kovetkezo tobbe-kevesbe univerzalis megoldasokat latom:
# a., dragndrop -al bedobni a mail header -et hozzank.
#   benne a felado, subject, mas nem kell. elonye, hogy ez akar egy
#   thunderbird -el is mukodne. egy iframe/masik brozer ablak textbox -aba
#   is be lehet dobni.
#   pro:
#   - univerzalis, akar helyi alkalmazasokkal is mukodik
#   kontra:
#   - a user -nek kicsit nagyobb munka mint egy gombot nyomni
# b., iframe -be nyitni vagy dragndrop -al bedobni a mail linkjet hozzank
#   ekkor csak linket kaphatunk, amibol le kell kerni a tartalmat, parse -olni.
#   pro:
#   - kenyelmes, csak "megoldom!" / "kesz!" gombok
#   kontra:
#   - a juzernek ki kell adnia a jelszavait a szervernek
#   - helyi alkalmazasokkal nem mukodik
# c., firefox toolbar -on lenne ra egy gomb, a html tartalmat post -olna el.
#   Ehhez programozni kell, valszeg javascript -ben.
#   pro:
#   - juzernek kenyelmes, nem kell kiadni a jelszavait se.
#   kontra:
#   - ujabb, kesobb semmire se jo API -t megismerni
#   - helyi alkalmazasokkal nem mukodik
# 
# Az integracional egy nagy melo, hogy nekunk figyelni kell a Toggl
# frissiteseket (most csak globalis refresh van).
# 
# Egy felado jellemzoen tobb projectbe is irhat levelet, ezt automatikusan
# nem tudjuk eldonteni. Kell hogy legyen egy legordulo lista, amivel attehetjuk
# a taszkot egy adott project ala. Futo taszk mozgatasat nem tamogatja a Toggl
# API, ez egy remove&set kor lenne.
# Inkabb dropoljuk egy project -re a treeview -ben, abbol lehet egy alternativ
# always-on-top ablak ami olyan keskeny lenne mint a dragndrop doboz a
# legordulo projectlistaval!
# Task -ot ne mutassunk benne??? Lehet jo lenne menedzselni az egeszet, nem kene
# a tray -rol nyitogatni!
# 

class Time
    def to_date_time
        Qt::DateTime.new(self)
    end
end

require 'autocode'
module App
    include AutoCode
    auto_load true, :directories => [ File.dirname($0)+"/model" ]
    module Items
        include AutoCode
        auto_load true, :directories => [ File.dirname($0)+"/model/items" ]
    end
    module View
        include AutoCode
        auto_load true, :directories => [ File.dirname($0)+"/view" ]
    end
    module Controller
        include AutoCode
        auto_load true, :directories => [ File.dirname($0)+"/controller" ]
    end

    class CommunicationError < Exception; end
    class LoginError < Exception; end

    about = KDE::AboutData.new("p2", "Hello World", KDE.ki18n(""), "0.1")   # ??

    KDE::CmdLineArgs.init(ARGV, about)
    #app = Qt::Application.new(ARGV)
    app = KDE::Application.new
    $widget = App::Controller::MainWindow.new(App::Ktoggl.new)
    $widget.model.tree.reload
    $widget.view.show
    app.exec
end
